package com.lanou3g.code0410.counter;

/**
 * Created by dllo on 18/4/12.
 */
public class OpPower extends Operator{

    //如何求幂:
    //1.num2 = 0;
    //2.num2 != 0 => 结果是num1 * (num1 的num2 - 1次幂)
    //递归:在一个方法中,调用自己,叫做递归
    //好处:当我们把条件想清楚了之后,不需要额外的变成思想,直接翻译成代码,所有的递归都可以用迭代(循环)来实现
    //并且普通递归效率低下
    @Override
    public Number compute(int num1, int num2) {
      //  return Math.pow(num1,num1);  //系统自带的
//        boolean isN = false;
//        if (num2 < 0){
//            num2 = -num2;
//            isN = true;
//        }
//



//
//
//        if (num2 == 0){
//            // 任何数的0次幂都为1;
//            return 1;
//        }else {
//
//            //Number 只能用来存值,不能用来计算,返回的可能是整数,也可能是浮点,存在强转的计算
//
//           // Number res = num1 * compute(num1,num2-1);
//
//            return num1 * compute(num1,num2-1);
//        }

//        int reult = 1;
//        for (int i = 0; i < num2; i++) {
//            reult *= num1;
//        }
//        return reult;


        if (num2 < 0){
            return  1f/power(num1,num2 * -1); //Float
        }else {
            return power(num1,num2); //Integer
        }




    }


    //num2 大于0 的情况
    private Integer power(int num1,int num2){

        if (num2 == 0){
            return 1;
        }
        else {
            return num1*power(num1,num2-1);
        }

    }





}

